package view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.aop.windows.TransactionalDialog;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.WindowOwner;

import ApplicationModels.EmpleadoAppModel;
import Domain.Disponibilidad;

@SuppressWarnings("serial")
public class EditarEmpleadoWindow extends TransactionalDialog<EmpleadoAppModel> {

	public EditarEmpleadoWindow(WindowOwner owner, EmpleadoAppModel model) {
		super(owner, model);
	}

	@Override
	protected void createMainTemplate(Panel mainPanel) {
		this.setTitle("Empleado");

		super.createMainTemplate(mainPanel);

		this.tablaResultados(mainPanel);
		this.tablaAcciones(mainPanel);
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		Panel form = new Panel(mainPanel);
		form.setLayout(new ColumnLayout(2));

		new Label(form).setText("Nombre y Apellido");
		new TextBox(form).bindValueToProperty("empleado.nombreYApellido");

		new Label(form).setText("Legajo");
		new TextBox(form).bindValueToProperty("empleado.legajo");

	}

	// ESTO VA SI LA DISPONIBILIDAD ES UNA CLASE ( igual falta retocar)

	private void tablaResultados(Panel mainPanel) {
		new Label(mainPanel).setText("Disponibilidad");
		Table<Disponibilidad> table = new Table<Disponibilidad>(mainPanel,
				Disponibilidad.class);
		
		table.setHeigth(150);
		table.setWidth(450);

		table.bindItemsToProperty("empleado.disponibilidad");
		table.bindValueToProperty("disponibilidadSeleccionada");

		this.descrpcionTablaResultados(table);
	}

	protected void descrpcionTablaResultados(Table<Disponibilidad> table) {
		new Column<Disponibilidad>(table)
				//
				.setTitle("Dia").setFixedSize(150)
				.bindContentsToProperty("dia");
		new Column<Disponibilidad>(table)
				//
				.setTitle("Desde").setFixedSize(150)
				.bindContentsToProperty("desde");

		new Column<Disponibilidad>(table)
				//
				.setTitle("Hasta").setFixedSize(150)
				.bindContentsToProperty("hasta");

	}

	private void tablaAcciones(Panel mainPanel) {
		Panel actionsPanel = new Panel(mainPanel);
		actionsPanel.setLayout(new HorizontalLayout());

		Button nuevo = new Button(actionsPanel);
		nuevo.setCaption("Agregar");
		nuevo.onClick(new MessageSend(this, "crearDisponibilidad"));

		Button remove = new Button(actionsPanel);
		remove.setCaption("Borrar");
		remove.onClick(new MessageSend(this.getModelObject(),
				"eliminarDisponibilidadSeleccionada"));

		Button cancelar = new Button(actionsPanel);
		cancelar.setCaption("Guardar");
		cancelar.onClick(new MessageSend(this, "accept"));

		// Deshabilitar los botones si no hay ningún elemento seleccionado en la
		// grilla.
		NotNullObservable elementSelected = new NotNullObservable(
				"disponibilidadSeleccionada");
		remove.bindEnabled(elementSelected);

	}

	// //////////////////ACCIONES////////////////////////////

	public void crearDisponibilidad() {
		this.getModelObject().setDisponibilidadSeleccionada(new Disponibilidad());
		this.openDialog(new DisponibilidadWindow(this, this.getModelObject()));
	}

	private void openDialog(Dialog<?> dialog) {
		dialog.open();
	}
	
}
